SPB Git forge

spb/spb-cloud

Public
10commits 1branches 0releases
3.2 MBsize
maindefault branch
yesterdaylast push
JavaScript 56.7% TypeScript 42.6%
1.7 KB · 36 lines typescript
Raw Blame History
1import { NextRequest, NextResponse } from "next/server";2import { getIronSession } from "iron-session";3import { SessionData, sessionOptions } from "@/lib/session";4import { prisma } from "@/lib/prisma";5import { hashPassword, requireAdmin } from "@/lib/auth";67export async function PATCH(request: NextRequest, { params }: { params: { id: string } }) {8  const response = NextResponse.next();9  const session = await getIronSession<SessionData>(request, response, sessionOptions);10  if (!session.userId || !(await requireAdmin(session.userId))) return NextResponse.json({ error: "Forbidden" }, { status: 403 });1112  const body = await request.json();13  const data: Record<string, unknown> = {};14  if (body.name !== undefined) data.name = body.name;15  if (body.username !== undefined) data.username = body.username;16  if (body.role !== undefined) data.role = body.role;17  if (body.password) data.passwordHash = await hashPassword(body.password);1819  const user = await prisma.user.update({20    where: { id: params.id },21    data,22    select: { id: true, username: true, name: true, role: true },23  });24  return NextResponse.json(user);25}2627export async function DELETE(request: NextRequest, { params }: { params: { id: string } }) {28  const response = NextResponse.next();29  const session = await getIronSession<SessionData>(request, response, sessionOptions);30  if (!session.userId || !(await requireAdmin(session.userId))) return NextResponse.json({ error: "Forbidden" }, { status: 403 });31  if (params.id === session.userId) return NextResponse.json({ error: "Cannot delete yourself" }, { status: 400 });3233  await prisma.user.delete({ where: { id: params.id } });34  return NextResponse.json({ success: true });35}36